package net.xxcxcxcx.xc_enhancedmob.render;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.util.math.MatrixStack;

/**
 * 渲染基类主要用于处理具体的渲染任务
 */
public class BaseCustomRenderer {
    public MinecraftClient client;//用于保存本地连接数据
    private float zOffset;

    public BaseCustomRenderer(MinecraftClient mc) {
        client = mc;
    }//用于初始化

    //获得当前渲染深度
    public float getZOffset() {
        return this.zOffset;
    }

    //设置当前渲染深度,流处理
    public BaseCustomRenderer setZOffset(int zOffset) {
        this.zOffset = zOffset;
        return this;
    }

    /**
     * 通过element获得图片并渲染在屏幕的(x,y,z)位置
     * <p>注意(x,y,z)为图片左上端点的位置,z为{@link #zOffset}
     * <p>渲染长度为element.width
     * <p>渲染宽度为element.height
     *
     * @param matrices 用于渲染的矩阵堆栈
     * @param element  用于渲染的图片和图片相对位置信息
     * @param x        屏幕坐标x
     * @param y        屏幕坐标y
     */
    public void drawTexture(MatrixStack matrices, TextureElement element, float x, float y) {
        this.drawTexture(matrices, element, x, y, 1, 1);
    }

    /**
     * 通过element获得图片并渲染在屏幕的(x,y,z)位置
     * <p>注意(x,y,z)为图片左上端点的位置,z为{@link #zOffset}
     * <p>渲染长度为element.width * widthPercentage
     * <p>渲染宽度为element.height * heightPercentage
     *
     * @param matrices         用于渲染的矩阵堆栈
     * @param element          用于渲染的图片和图片相对位置信息
     * @param widthPercentage  图片水平渲染百分比
     * @param heightPercentage 图片垂直渲染百分比
     * @param x                屏幕坐标x
     * @param y                屏幕坐标y
     */
    public void drawTexture(MatrixStack matrices, TextureElement element, float x, float y, float widthPercentage, float heightPercentage) {
        this.drawTexture(matrices, element, x, y, element.getWidth() * widthPercentage, element.getHeight() * heightPercentage, widthPercentage, heightPercentage);
    }

    /**
     * 通过element获得图片并渲染在屏幕的(x0,y0,z)到(x1,y1,z)位置
     * <p>注意(x0,y0,z)为图片左上端点的位置,(x1,y1,z)为图片右下端点的位置,z为{@link #zOffset}
     * <p>渲染长度为width
     * <p>渲染宽度为height
     *
     * @param matrices         用于渲染的矩阵堆栈
     * @param element          用于渲染的图片和图片相对位置信息
     * @param widthPercentage  图片水平渲染百分比
     * @param heightPercentage 图片垂直渲染百分比
     * @param x                屏幕坐标x
     * @param y                屏幕坐标y
     * @param width            屏幕渲染长度
     * @param height           屏幕渲染宽度
     */
    public void drawTexture(MatrixStack matrices, TextureElement element, float x, float y, float width, float height, float widthPercentage, float heightPercentage) {
        this.drawTexture(matrices, element, x, x + width, y, y + height, getZOffset(), widthPercentage, heightPercentage);
    }

    /**
     * 通过element获得图片并渲染在屏幕的(x0,y0,z)到(x1,y1,z)位置
     * <p>注意(x0,y0,z)为图片左上端点的位置,(x1,y1,z)为图片右下端点的位置
     * <p>渲染长度为width
     * <p>渲染宽度为height
     *
     * @param matrices         用于渲染的矩阵堆栈
     * @param element          用于渲染的图片和图片相对位置信息
     * @param widthPercentage  图片水平渲染百分比
     * @param heightPercentage 图片垂直渲染百分比
     * @param x0               屏幕坐标x0
     * @param y0               屏幕坐标y0
     * @param x1               屏幕坐标x1
     * @param y1               屏幕坐标y1
     * @param z                屏幕坐标z
     */
    public void drawTexture(MatrixStack matrices, TextureElement element, float x0, float x1, float y0, float y1, float z, float widthPercentage, float heightPercentage) {
        client.getTextureManager().bindTexture(element.getTexture());
        HudRendererHelper.drawTexture(matrices, element, x0, x1, y0, y1, z, widthPercentage, heightPercentage);
    }
}
